# coding=utf-8
from datetime import datetime
from comment.ultils.Serializers import BasePaginateSerializer, BaseListSerializer
class InvestRecordPaginateSerializer(BasePaginateSerializer):
    """投资记录列表的分页序列化"""

    def get_object(self, obj):
        return {
            'pId': obj.pId,
            'plan_name': obj.product.productName,
            'invest_amount': float(obj.pAmount),
            "yearRate": float(obj.pEarnings),
            "totalIncome": float(obj.pMonthlyExtractInterest * obj.pDeadline),
            'month_Income': float(obj.pMonthlyExtractInterest),
            'deal_date': obj.pBeginDate.strftime("%Y-%m-%d"),
            # 'period': obj.pDeadlineAsDay / 30,
            'period': obj.pDeadline,
            'status': obj.pStatus,
            'remark': obj.pRemark
        }

class DealRecordPaginateSerializer(BasePaginateSerializer):
    """交易记录列表的分页序列化"""

    def get_object(self, obj):
        return {
            'deal_date': obj.aDate.strftime("%Y-%m-%d"),
            'deal_type': obj.aType,
            "descrp": obj.aDescreption,
            "deal_amount": float(obj.aAmount),
            'aAfter_Money': float(obj.aAfterTradingMoney),
            'deal_status': '交易成功' if obj.aTransferStatus else '交易失败',
            'user_name': obj.user.username
        }

class DebtPaginateSerializer(BasePaginateSerializer):
    '''债权的分页序列化'''
    def get_object(self, obj):
        return {
            'debtNo': obj.debtNo, #当前债权的编号
            'loanNo': obj.loanNo, #借款的编号（一个债权对应一个借款）
            "loanStartDate": obj.loanStartDate.strftime("%Y-%m-%d"), #借款开始的时间
            "repaymenDate": obj.repaymenDate, #还款的时间
            'debtYearRate': float(obj.debtYearRate), #债券的年利率
            'debtMoney': float(obj.debtMoney), #债权金额（总金额）
            'debtOriginalMoney': float(obj.repaymenMoney), #转入金额
            'matchedStatus': obj.matchedStatus, #匹配状态（未匹配，部分匹配，完全匹配）
            'matchedMoney': float(obj.matchedMoney), #匹配金额
            'debtStatus': obj.matchedStatus, #也是匹配状态，有余字段
        }

class LoanPaginateSerializer(BasePaginateSerializer):
  """ 借款列表分页序列化"""

  def get_object(self, obj):
      return {
          'loanApplyId': obj.id, #借款ID号
          'name': obj.lName, #借款人的真实姓名
          "applyTime": obj.applyDate.strftime("%Y-%m-%d %H:%M:%S"), #借款开始时间
          "amount": float(obj.loanNum), #借款金额
          'duration': obj.duration, #借款时长
          'loanRate': float(obj.lRate), #利率
          'repayDay': obj.lRepayDay, #还款时间
          'repayType': obj.lRepayType, #还款的类型
          'status': obj.status, #状态，借款是已经审核还是未审核
          'debt_match_status': obj.debt_info.matchedStatus if obj.debt_info else '0', #匹配状态
          'debt_id': obj.debt_info.id if obj.debt_info else '0',
      }

class RepayPlanSerializer(BaseListSerializer):
  """还款计划的序列化"""

  def to_dict(self):
      list = []
      for obj in self.data_list:
          list.append(
              {
                  'id': obj.id,#还款ID
                  'currentTerm': obj.currentTerm, #还款第几期
                  'receivableDate': obj.receivableDate.strftime("%Y-%m-%d"), #应还日期
                  "receivableMoney": float(obj.receivableMoney), #应还余额
                  'isReturned': obj.isReturned, #状态，是否还款
              }
          )
      return list

class AllMatchedPaginateSerializer(BasePaginateSerializer):
    '''所有的待匹配资金和已经匹配资金的序列化'''
    def get_object(self, obj):
        return {
            'weigh': 0, #权重
            'username': obj.investRecord.user.username, #用户名
            "InvestRecordNum": obj.investRecord.pSerialNo, #流水号
            "productName": obj.investRecord.product.productName, #产品的名称
            'investDate': obj.investRecord.pDate.strftime("%Y-%m-%d"), #投资的日期
            'period': obj.investRecord.pDeadlineAsDay, #期数
            'notMatchedMoney': float(obj.fNotMatchedMoney), #投资理财的资金（是待匹配或者已匹配的资金）
            'matchStatus': obj.matchedStatus, #状态
        }

class ExpectedReturnPaginateSerializer(BasePaginateSerializer):
    '''当前用户的所有预期收益列表'''

    def get_object(self, obj): #obj预期收益的模型类
        return {
            'return_id': obj.id,
            'userId': obj.userId,
            'productId': obj.product.productName, #产品名字
            "investRcordID": obj.investRecord,
            "expectedDate": obj.expectedDate.strftime("%Y-%m-%d"),
            # date 日期的 时间戳
            'expectedStamp': datetime.timestamp(datetime(obj.expectedDate.date().year, obj.expectedDate.date().month,
                                                         obj.expectedDate.date().day)),
            'return_Money': float(obj.expectedMoney),

        }

class MatchedResultPaginateSerializer(BasePaginateSerializer):
    '''匹配结果列表分页序列化'''

    def get_object(self, obj):
        return {
            'userId': obj.userId,
            'debtId': obj.debtId, #债权的id
            "investId": obj.investId, #投资记录的ID
            "transNo": obj.transferSerialNo, #流水号
            'Money': float(obj.purchaseMoney), #匹配的金额
            'matchDate': obj.matchDate.strftime("%Y-%m-%d %H:%M:%S") #匹配的时间
        }





